Use case: Write and read DMA operations

Sequence diagram

Write and read DMA operations

  @startuml

  participant App as "User application"
  participant HAL as "HAL Driver"

  == Prerequisite: Initialization and configuration ==

  == Process ==

  App -> HAL : HAL_SDRAM_Write_DMA()
  note right: **Write DMA operation**
  App <-- HAL : hal status : HAL_OK or HAL_ERROR
  note right: **Return status**

  note over HAL: Wait for complete callback

  App -> HAL : HAL_SDRAM_Read_DMA()
  note right: **Read DMA operation**
  App <-- HAL : hal status : HAL_OK or HAL_ERROR
  note right: **Return status**

  note over HAL: Wait for complete callback

  @enduml

Code snippet

HAL1

HAL2

/* Write DMA data operation -------------------- */
HAL_SDRAM_Write_DMA(&hsdram,
                    (uint32_t *)(device_address),
                    data_to_write,
                    BufferSize
                   );


/* Wait for complete callback */

/* Read DMA data operation */
HAL_SDRAM_Read_DMA(&hsdram,
                    (uint32_t *)(device_address),
                    data_read,
                    BufferSize
                  );

/* Wait for complete callback */
/* Write DMA data operation */
HAL_DMA_StartDirectXfer_IT(&dma_handle,
                            data_to_write,
                            (uint32_t *)(device_address),
                            BufferSize
                          );

/* Wait for complete callback */

/* Read DMA data operation */
HAL_DMA_StartDirectXfer_IT(&dma_handle,
                            (uint32_t *)(device_address),
                            data_read,
                            BufferSize
                          );

/* Wait for complete callback */

Key changes

  1. HAL2 uses generic HAL DMA direct transfer APIs for SDRAM DMA operations.

  2. HAL2 return status can be HAL_INVALID_PARAM for invalid configuration/parameters.